我有一个包含多个文件夹的目录。我想编写一个shell脚本来查找另一个目录中与所提到的文件夹同名的文件。 为了澄清我有一个包含test1和test2文件夹的目录。我有另一个目录,其中有两个文件,名称为test1和test2。我的目标是转到具有文件夹的目录,然后获取文件夹名称。然后使用文件夹名称查找具有相同名称的文件,并将其复制到具有相同名称的文件夹。 我编写了以下脚本,但无法复制该文件。
for d in /home/Documents/test/*/ ; do
find /home/Documents/binaries/ -name "$d" -type f -exec cp {} /home/Documents/test/$d \;
cd "$d"
done
答案 0 :(得分:0)
$d
将设置为完整路径名称,例如/home/Documents/test/test1/
,但您只需要test1
作为-name
主要参数。您可以使用参数展开从$d
的值中删除前导路径,但这需要两个步骤。
for d in /home/Documents/test/*/ ; do
fname=${d##*/} # Strip /home/Documents/test/
fname=${fname%/} # Strip the trailing /
# Note that d is already the full directory name you want to use
# as the target file for `cp`
find /home/Documents/binaries/ -name "$fname" -type f -exec cp {} "$d" \;
done
cd
命令似乎无法完成任何有用的操作,因为您始终使用绝对路径名。
更简单的方法是首先将工作目录更改为/home/Documents/test
。
cd /home/Documents/test/
for d in */; do
find /home/Documents/binaries/ -name "$d" -type f -exec cp {} /home/Documents/test/"$d" \;
done