这是有效的:
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/