我有一个像这样的目录
Main Directory
SubDirectory
SubsubDirectory1
xx.jpg
xx,jpg
SubsubDirectory2
xx.jpg
xx,jpg
SubDirectory
SubsubDirectory1
xx.jpg
xx,jpg
SubsubDirectory2
xx.jpg
xx,jpg
SubDirectory
SubsubDirectory1
xx.jpg
xx,jpg
SubsubDirectory2
xx.jpg
xx,jpg
Run Code Online (Sandbox Code Playgroud)
我想将所有 SubsubDirectory1 中的所有文件复制到目标目录
如果文件的名称不唯一,则
cp "Main Directory"/*/Subsubdirectory1/* destdir
Run Code Online (Sandbox Code Playgroud)
会覆盖目的地的一些文件。如果有数千个匹配的路径名,这也会失败。
为了解决这个问题,使用 GNU cp
:
for pathname in "Main Directory"/*/Subsubdirectory1/*; do
cp --backup=numbered "$pathname" destdir
done
Run Code Online (Sandbox Code Playgroud)
这将为文件创建编号备份,否则这些备份将被覆盖。
同样的事情,但使用非 GNU cp
:
for pathname in "Main Directory"/*/Subsubdirectory1/*; do
# create first stab at destination pathname
dest="destdir/${pathname##*/}"
i=0
while [ -e "$dest" ]; do
# destination name exists, remove backup number from end of
# pathname and replace with next one in the sequence
i=$(( i + 1 ))
dest="${dest%.~*~}.~$i~"
done
cp "$pathname" "$dest"
done
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17449 次 |
最近记录: |