亲爱的脚本专家,作为脚本编写的新手,我将非常感谢您的帮助。我想到一个简单的任务:我有一组目录 dir1 dirxy dir...每个目录中都有一些文件,但我只想复制其中一个,假设一个以 A 开头的文件......
搜索此页面,我发现了一个用于列出子目录的脚本:
for i in *
do # Line breaks are important
if [ -d $i ] # Spaces are important
then
"do some task"
fi
done
做一些任务是个问题...我想将带有 A* 的文件复制到另一个目录并将其重命名为 B_nameofparentdirectory
谢谢切赫
以斜杠结尾来使 glob 仅匹配目录,以便编写脚本
for i in */; do
"do some task"
done
然后,在每个目录中,您可以使用 break
语句使内部循环仅处理第一个文件:
for i in */; do
for f in "${i}"A*; do
cp "$f" "$dest/B_$dest"
break
done
done
这将导致循环继续处理每个外部目录,但在每个目录中,只会处理名为 A* 的第一个文件。
也就是说,您可以使用 find
命令更直接地完成此操作:
find . -mindepth 2 -maxdepth 2 -type f -name 'A*' -execdir cp {} "$dest/B_$dest" ;
使用 find 添加类似于其他答案的实现
for file in $(find . -name "A*" -type f)
do
cp ${file} ${destDir}/B_${destDir}
break
done
您可以使用 find 列出当前目录及其子目录中以 A 开头的所有文件。
find . -name "A*" -type f