我在目录中有一个文件夹结构,如下所示:
/
A, B/Subdir Level 1/ Subdir L2/Folder A/abc.json
A, C/Subdir Level 1/ Subdir L2/Folder A/abc.json
A, D/Subdir Level 1/ Subdir L2/Folder A/abc.json
A, F/Subdir Level 1/ Subdir L2/Folder A/abc.json
A, G/Subdir Level 1/ Subdir L2/Folder A/abc.json
B, Z/Subdir Level 1/ Subdir L2/Folder A/abc.json
C, F/Subdir Level 1/ Subdir L2/Folder A/abc.json
我想复制所有 abc.json 文件并将它们放在一个 New_Folder 文件夹中,但在此过程中重命名它们,以便我知道每个 abc.json 的来源。
New_Folder/
A, B_abc.json (or A, Babc.json...don't really care as long as A, B appear)
A, C_abc.json
A, D_abc.json
..... 等等
我如何使用 shell 脚本实现这一点。我使用 Ubuntu 14.04
答案1
这是假设您已经cd
进入了想要保留在名称中的级别。您可以使用以下命令进行仔细检查find
:
find -type f -iname abc.json
./A, B/Subdir Level 1/Subdir L2/abc.json
./A, C/Subdir Level 1/Subdir L2/abc.json
./A, F/Subdir Level 1/Subdir L2/abc.json
假设您已经创建了文件夹 ../NewFolder,以下命令应复制所有 json 文件并将第一级子目录置于新名称中。只需确保将所有 4 行粘贴到您的终端中即可!
find -type f -iname \*.json | while read x; do
dirname="$(echo "$x" | sed -r 's_^\.?/?__;s_/.*__')";
filename="$(echo "$x" | sed -r 's_.*/__')";
cp -v "$x" "../NewFolder/$dirname - $filename"; done
‘./A, B/Subdir Level 1/Subdir L2/abc.json’ -> ‘../NewFolder/A, B - abc.json’
‘./A, C/Subdir Level 1/Subdir L2/abc.json’ -> ‘../NewFolder/A, C - abc.json’
‘./A, F/Subdir Level 1/Subdir L2/abc.json’ -> ‘../NewFolder/A, F - abc.json’