使用shell脚本查找和复制文件(文件夹名称和文件名相同)

时间:2015-08-19 20:33:13

标签: bash shell sh

我有一个包含多个文件夹的目录。我想编写一个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

1 个答案:

答案 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