我有多个子文件夹,例如:
ls ./
F1 F2 F5 F8 F12 ...
每个文件夹都包含文件“file.txt”
如何将所有file.txt文件复制到包含文件夹名称的主文件夹?
cp ./F1/file.txt ./file_1.txt
cp ./F2/file.txt ./file_2.txt
...
答案 0 :(得分:1)
declare -a dirs
i=1
for d in */
do
dirs[i++]="${d%/}"
done
echo "There are ${#dirs[@]} dirs in the current path"
for((i=1;i<=${#dirs[@]};i++))
do
echo "Copying file.txt from ${dirs[i]} dir..."
cp ./${dirs[i]}/file.txt ./file_$i.txt
done
例如,将其另存为脚本文件fileTxtCopy.sh
。然后将其放在父目录上并为其提供可执行权限sudo chmod +x fileTxtCopy.sh
。
将其作为脚本运行,您应该将所有file.txt
文件复制到父目录中。
答案 1 :(得分:1)
Perl One Liner
首先转到主文件夹而不是:
find . | perl -a -F/ -lne 'qx(cp -r "$F[1]" T/ )'
注意强>
如果是的话,不要担心屏幕上的日志文件!
的 T / 强>
是你的目标目录
主文件夹
所有文件都存在的地方。如果您的所有文件位于音乐文件夹中,例如;所以cd Music
然后 Perl One Liner
答案 2 :(得分:0)
将当前目录中每个文件夹中的file.txt
个文件复制到当前目录,并将文件夹名称中包含的数字附加到复制文件的名称中。
for i in *; do a=$(<<< "$i" grep -o "[0-9]*" -); cp "$i/file.txt" "file_$a.txt"; done
虽然不是最强大的方法。