在unix下,我想把所有子目录中的所有具有特定扩展名的文件(所有excel文件)复制到另一个目录中。我有以下命令:
cp --parents `find -name \*.xls*` /target_directory/
此命令的问题如下:
这些问题有什么解决办法吗?
o2gm4chl1#
--parents正在复制目录结构,因此您应该删除它。这样写的话,find就会执行,输出会放到命令行上,这样cp就不能区分文件名之间的空格和文件名 * 中 * 的空格。
--parents
find
cp
$ find . -name \*.xls -exec cp {} newDir \;
其中cp对find找到的每个文件名执行,并正确地传递文件名。Here's more info关于此技术。您可以使用zsh并简单地输入
$ cp**/*.xls target_directory
zsh可以扩展通配符以包括子目录,并使这类事情变得非常容易。
zsh
68bkxrlz2#
从以上所有,我想出了这个版本。这个版本也适用于我在mac恢复终端。
find ./ -name '*.xsl' -exec cp -prv '{}' '/path/to/targetDir/' ';'
它将在当前目录和所有子目录中递归查找扩展名为xsl的文件,并将它们全部复制到目标目录。cp标志为:
dbf7pr2w3#
我也遇到过类似的问题。我用以下方法解决了这个问题:
find dir_name '*.mp3' -exec cp -vuni '{}' "../dest_dir" ";"
'{}'和";"对每个文件执行复制。
'{}'
";"
qnzebej04#
我也必须自己做这个。我是通过--父母对cp的论证来做的:
find SOURCEPATH -name filename*.txt -exec cp --parents {} DESTPATH \;
bxjv4tth5#
find [SOURCEPATH] -type f -name '[PATTERN]' | while read P; do cp --parents "$P" [DEST]; done
您可以删除--parents,但如果多个文件具有相同的名称,则存在冲突的风险。
agyaoht76#
在2022年,zsh解决方案也适用于Linux Bash:
cp**/*.extension /dest/dir
工作正常。
6条答案
按热度按时间o2gm4chl1#
--parents
正在复制目录结构,因此您应该删除它。这样写的话,
find
就会执行,输出会放到命令行上,这样cp
就不能区分文件名之间的空格和文件名 * 中 * 的空格。其中
cp
对find
找到的每个文件名执行,并正确地传递文件名。Here's more info关于此技术。您可以使用zsh并简单地输入
zsh
可以扩展通配符以包括子目录,并使这类事情变得非常容易。68bkxrlz2#
从以上所有,我想出了这个版本。这个版本也适用于我在mac恢复终端。
它将在当前目录和所有子目录中递归查找扩展名为xsl的文件,并将它们全部复制到目标目录。
cp标志为:
dbf7pr2w3#
我也遇到过类似的问题。我用以下方法解决了这个问题:
'{}'
和";"
对每个文件执行复制。qnzebej04#
我也必须自己做这个。我是通过--父母对cp的论证来做的:
bxjv4tth5#
您可以删除--parents,但如果多个文件具有相同的名称,则存在冲突的风险。
agyaoht76#
在2022年,zsh解决方案也适用于Linux Bash:
工作正常。