[英]Copy files from multiple folders with including folder name in Linux
我有多个子文件夹,例如:
ls ./
F1 F2 F5 F8 F12 ...
每个文件夹包含文件“ file.txt”
如何将所有file.txt文件复制到包含文件夹名称的主文件夹中?
cp ./F1/file.txt ./file_1.txt
cp ./F2/file.txt ./file_2.txt
...
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
文件复制到父目录中。
Perl一线
首先去主文件夹比:
find . | perl -a -F/ -lne 'qx(cp -r "$F[1]" T/ )'
注意
不用担心屏幕上的日志文件!
T /
是您的目标目录
主文件夹
您所有文件所在的位置。 例如,如果您的所有文件都在“ 音乐 ”文件夹中; 如此cd Music
然后是Perl One Liner
将file.txt
文件从当前目录内的每个文件夹复制到当前目录,并将文件夹名称中包含的数字附加到复制文件的名称之后。
for i in *; do a=$(<<< "$i" grep -o "[0-9]*" -); cp "$i/file.txt" "file_$a.txt"; done
虽然不是最可靠的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.