qod*_*nja 9 find filenames file-copy directory-structure
使用 Bash
因此,假设我将一堆文件随机放置在父目录中~/src
,我想获取与某个后缀匹配的所有文件并将它们移动(或复制)到一个~/dist
目录中。
为此,让我们假设所有文件名都具有以下命名约定:
<filename_prefix>.<filename_suffix>
Run Code Online (Sandbox Code Playgroud)
我发现这是一种快速获取特定文件filename_suffix
并将它们放入 dist 文件夹的方法:
mkdir ~/dst
find source -name "*.xxx" -exec mv -i {} -t ~/dst \;
Run Code Online (Sandbox Code Playgroud)
现在更进一步......在这种情况下filename
,我如何使用 find 的输出,并使用filename_prefix
生成一个同名的目录,~/dist
然后将具有该前缀的所有文件移动(或复制)到适当的目录中?
mkdir ~/dst
find source -name "*.xrt,*.ini,*.moo" -exec mv -i {} -t ~/dst \;
Run Code Online (Sandbox Code Playgroud)
本质上,我如何更改上述命令(或者可能使用另一个命令)来创建这样的结构
(输出)
~/dist/people/people.xrt
~/dist/games/games.xrt
~/dist/games/games.moo
~/dist/games/games.ini
~/dist/monkeys/monkeys.ini
~/dist/monkeys/monkeys.xrt
Run Code Online (Sandbox Code Playgroud)
从这样的目录树?
(输入)
~/src/xrt/people.xrt
~/src/xrt/games.xrt
~/src/conf/games.ini
~/src/pack/monkeys.xrt
~/src/e344/games.moo
~/src/e344/monkeys.moo
~/src/en-us/monkeys.ini
Run Code Online (Sandbox Code Playgroud)
Sté*_*nez 10
find
在这种情况下告诉该怎么做真是太糟糕了。
更好地使用外壳:
for i in **/*.{xrt,ini,moo}; do
FILE=$(basename "$i")
DIR=~/dst/${FILE%.*}
echo mkdir -p -- "$DIR"
echo mv -i -t "$DIR" -- "$i"
done
Run Code Online (Sandbox Code Playgroud)
使用shopt -s globstar
使**
水珠工作(或使用zsh的!)。echo
如果命令打印出您想要的内容,请稍后删除s。