这是有效的:

ls -SF data/*/*/* | xargs -I % cp % migrations/db.tmp/

但我想在文件名前面加上目录名“
例如
data/folder1/subfolder1/file1.js -> data/folder1-subfolder1-file1.js

我尝试的下一步是:(但没能成功)
 ls -SF migrations/db/*/*/* | xargs -I % cp % migrations/db.tmp/$(basename %)-%

有什么想法吗?

最佳答案

不要使用ls,尤其是使用-F选项时:

cd data
for f in */*/*; do cp "$f" "${f//\//-}"; done

这里有一个更复杂的方法
cd data
printf "%s\n" */*/* | sed 'h; s,/,-,g; x; G; s/\n/ /; s/^/cp /'

它将输出一组cp命令。导入| sh执行它们。

关于linux - Flattern Sub Dirs并使用bash在目录名前添加文件名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40473466/

10-15 05:08