【问题标题】:Copy files from multiple folders with including folder name in Linux从多个文件夹中复制文件,包括 Linux 中的文件夹名称
【发布时间】:2017-06-17 18:07:48
【问题描述】:
我有多个子文件夹,例如:
ls ./
F1 F2 F5 F8 F12 ...
每个文件夹都包含文件“file.txt”
如何将所有 file.txt 文件复制到包含文件夹名称的主文件夹?
cp ./F1/file.txt ./file_1.txt
cp ./F2/file.txt ./file_2.txt
...
【问题讨论】:
标签:
linux
file
directory
cp
file-manipulation
【解决方案1】:
将file.txt文件从当前目录内的每个文件夹复制到当前目录,并将文件夹名称中包含的数字附加到复制文件的名称。
for i in *; do a=$(<<< "$i" grep -o "[0-9]*" -); cp "$i/file.txt" "file_$a.txt"; done
虽然不是最稳健的方法。
【解决方案2】:
Perl One Liner
先到主文件夹比:
find . | perl -a -F/ -lne 'qx(cp -r "$F[1]" T/ )'
注意
如果会,请不要担心屏幕上的日志文件!
T/
是您的目标目录
主文件夹
您的所有文件都存在的地方。例如,如果您的所有文件都在文件夹 Music 中;所以cd Music 那么Perl One Liner
【解决方案3】:
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 文件复制到父目录中。