gpt4 book ai didi

linux - grep 匹配模式的文件名并 move 到所需的文件夹

转载 作者:太空狗 更新时间:2023-10-29 12:05:40 25 4
gpt4 key购买 nike

我在 .txt 文件中有一个模式列表。 [列表.txt]。对于 list.txt 中的每一行,我想在 list.txt 中以指定模式开头的位置找到所有文件,然后将这些文件 move 到另一个位置。考虑一个例子。

~/home/ana/folder_a 我有 list.txt,它看起来像这样......

list.txt

1abc
2def
3xyz

在这个位置,即 /home/ana/folder_a/,有多个以 list.txt 中的模式开头的文件。因此,有 1abc_a.txt、1abc_c.txt、1abc_f.txt、2def_g.txt、3xyz_a.txt 等文件

所以我想要实现的是:

for i in cat list.txt; do 
ls | grep '^$i' [thats the pattern] |
mv [files containing the pattern] to /home/ana/folder_b/

请注意,在其他位置,即/home/ana/folder_b/,我已经为每个模式创建了目录。

所以/home/ana/folder_b/包含像 1abc/, 2def/, 3xyz/这样的子目录实际上,我希望将所有匹配模式“1abc”、“2def”和“3xyz”的文件从/home/ana/folder_a/ move 到/home/ana/folder_b/中它们各自的子目录,这样/home/ana/folder_b/1abc 将有 1abc_a.txt 、 1abc_c.txt 和 1abc_f.txt ;/home/ana/folder_b/2def/将有 2def_g.txt 而/home/ana/folder_b/3xyz/将有 3xyz_a.txt

最佳答案

Grep 的 -f 选项匹配文件中的模式,因此您不必在 shell 中遍历文件中的每一行:

$ ls                              # List all files in dir, some match, some don't
1abc_a.txt 1abc_c.txt 1abc_f.txt 2def_g.txt 3xyz_a.txt file1 file2 list.txt

$ cat list.txt # List patterns to match against
1abc
2def
3xyz

$ ls | grep -f list.txt # grep for files that only match pattern
1abc_a.txt
1abc_c.txt
1abc_f.txt
2def_g.txt
3xyz_a.txt

通过管道传输到 xargs 以执行 move :

ls | grep -f list.txt | xargs -i -t mv {} ../folder_B
mv 1abc_a.txt ../folderB
mv 1abc_c.txt ../folderB
mv 1abc_f.txt ../folderB
mv 2def_g.txt ../folderB
mv 3xyz_a.txt ../folderB

编辑:意识到我错过了问题的子目录部分,@Thor 的答案是解决这个问题的最佳方法,我仍然认为您可能会从这个答案中找到一些用处。

关于linux - grep 匹配模式的文件名并 move 到所需的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13928064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com