Bash 如何使用find命令查找和替换jar文件
我在一个基本目录下有多个子目录。如果子目录有x.jar,我需要在另一个路径中复制几个可用的jar文件 我使用下面的命令来查找x.jar,然后我尝试复制jar文件Bash 如何使用find命令查找和替换jar文件,bash,unix,Bash,Unix,我在一个基本目录下有多个子目录。如果子目录有x.jar,我需要在另一个路径中复制几个可用的jar文件 我使用下面的命令来查找x.jar,然后我尝试复制jar文件 find . -type f -name x.jar | xargs cp /home/sampath.anisetti/tmp/*.jar 我得到的cp:target./test3/x.jar不是目录 请建议 注意:如果子目录没有x.jar,则在复制时需要跳过该目录。如何: find . -type f -name x.jar -p
find . -type f -name x.jar | xargs cp /home/sampath.anisetti/tmp/*.jar
我得到的cp:target./test3/x.jar
不是目录
请建议
注意:如果子目录没有x.jar,则在复制时需要跳过该目录。如何:
find . -type f -name x.jar -print0 |
while IFS= read -r -d'' file; do
cp -- /home/sampath.anisetti/tmp/*.jar "$(dirname -- "$file")"
done
它将找到所有名为x.jar
的文件,然后对于每个这样的文件,它将找到该文件所在的目录,并将所有其他*.jar
文件复制到该目录中。这样如何:
find . -type f -name x.jar -print0 |
while IFS= read -r -d'' file; do
cp -- /home/sampath.anisetti/tmp/*.jar "$(dirname -- "$file")"
done
它将找到所有名为
x.jar
的文件,然后对于每个这样的文件,它将找到该文件所在的目录,然后将所有其他*.jar
文件复制到那里。你能解释一下--
标志在cp
中的签名用法吗?@Inian这只是我所有脚本中都包含的一些标准预防措施。它确保cp
(或dirname
)如果文件名以-
开头,则不会将其视为命令行标志。可以避免使用sub-shell,使用进程替换
,如done@123:记得以前读过这里,也许我错了。因此,进程替换在子shell上运行所有操作,并且根本不使用本地环境?@ini命令在子shell中运行,而不是在proc sub中的循环中运行,而不是在管道中以相反的方式运行。它允许你保留变量。你能解释一下cp
中--
标志的签名用法吗?@Inian这只是我所有脚本中的一些标准预防措施。它确保cp
(或dirname
)如果文件名以-
开头,则不会将其视为命令行标志。可以避免使用sub-shell,使用进程替换
,如done@123:记得以前读过这里,也许我错了。因此,进程替换在子shell上运行所有操作,并且根本不使用本地环境?@ini命令在子shell中运行,而不是在proc sub中的循环中运行,而不是在管道中以相反的方式运行。它允许你保存变量。你有gnu查找吗?你有gnu查找吗?