我一直在研究问题但似乎找不到我需要的确切答案。
我有一个包含多个子目录的目录:
sent sent.~16~ sent.~22~ sent.~29~ sent.~35~ sent.~41~ sent.~48~ sent.~54~ sent.~60~ sent.~67~ sent.~73~ sent.~8~
sent.~10~ sent.~17~ sent.~23~ sent.~3~ sent.~36~ sent.~42~ sent.~49~ sent.~55~ sent.~61~ sent.~68~ sent.~74~ sent.~80~
sent.~11~ sent.~18~ sent.~24~ sent.~30~ sent.~37~ sent.~43~ sent.~5~ sent.~56~ sent.~62~ sent.~69~ sent.~75~ sent.~81~
sent.~12~ sent.~19~ sent.~25~ sent.~31~ sent.~38~ sent.~44~
每个子目录都包含一堆编号文件:
1. 11. 13. 15. 17. 4. 6. 8.
10. 12. 14. 16. 3. 5. 7. 9.
本质上,我想将所有这些子目录合并到一个目录中,但不覆盖同名文件。我是否需要更改每个子目录中文件的名称才能执行此操作(例如:foo --> foo_~10~)
,然后将所有文件合并到一个子目录中?
有没有一个简单的 bash 或 shell 脚本可以用于此?我尝试了 rsync、mv 和 cp 的一些变体,但还没有得到我想要的结果。
答案1
你可以用类似这样的脚本来做到这一点
#!/bin/bash
mkdir merged
for dir in sent*
do
cd "$dir"
for file in *
do
mv "$file" "$file"_"${dir#sent.}"
done
mv * ../merged
cd ..
done
如果您想根据问题中的方案重命名每个文件。如果您想以这样的方式重命名它们,即它们的字典顺序反映文件最初所在的文件夹,只需切换字符串$file
和的顺序${dir#sent.}
。