在Linux中复制包含文件夹名称的多个文件夹中的文件

时间:2017-02-01 05:05:10

标签: linux file directory cp file-manipulation

我有多个子文件夹,例如:

ls ./
F1 F2 F5 F8 F12 ...

每个文件夹都包含文件“file.txt”

如何将所有file.txt文件复制到包含文件夹名称的主文件夹?

cp ./F1/file.txt ./file_1.txt
cp ./F2/file.txt ./file_2.txt
...

3 个答案:

答案 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

虽然不是最强大的方法。