我正在使用一个程序来标记音乐,该.txt
程序会生成处理的跳过(未标记)文件夹的列表。
我只想能够获取此列表(其中包含每个文件夹的完整路径)并将此列出的文件夹移动到某个位置/media/skipped/
我找不到du
命令或者find
如何去做...而且我在 CLI 以及一般 Linux 方面的技能都非常基础。
所以如果有人能给我提供搜索方向或者使用一些命令的话我会很感激...
编辑:
好的……你真棒……感谢大家的快速回答。是的,每行都是一条路径(实际上,每次导入之前都会有一些行,我将其删除,在路径显示“跳过文件夹”之前,我在鼠标垫中运行了“查找和替换”命令。因此,只有路径,每行一个)
编辑 2:@Steeldriver 的解决方案有效。我只需要进一步编辑 .txt。此帖子可以标记为 [已解决],我不知道该怎么做。感谢所有人。
答案1
我建议while 循环
while IFS= read -r dir; do
echo mv -t /media/skipped/ "$dir"
done < yourfile.txt
这里echo
您可以测试命令 - 如果它运行正常并列出正确的移动顺序,则删除该单词echo
以使其真正运行。
例子:
$ ls -l olddir/
total 8
drwxrwxr-x 2 user user 4096 Jul 27 12:32 subdir
drwxrwxr-x 2 user user 4096 Jul 27 12:32 subdir with spaces
包含如下文件列表
$ cat dirlist.txt
olddir/subdir with spaces
olddir/subdir
然后
$ while IFS= read -r dir; do mv -vt newdir/ "$dir"; done < dirlist.txt
`olddir/subdir with spaces' -> `newdir/subdir with spaces'
`olddir/subdir' -> `newdir/subdir'
并验证
$ ls -l newdir/
total 8
drwxrwxr-x 2 user user 4096 Jul 27 12:32 subdir
drwxrwxr-x 2 user user 4096 Jul 27 12:32 subdir with spaces
答案2
您可以使用如下命令:
while read line; do mv "$line" /media/skipped/; done < directory_list.txt
我假设输入文件的每一行包含一个目录条目。
答案3
xargs 对于此很方便:
xargs -d '\n' mv -t /destination/dir < file.txt
答案4
你可以使用如下 for 循环:
for i in `cat file.txt`; do cp -r "$i" /media/skipped/" && rm -r "$i"; done
file.txt
是生成的文件,因此需要替换正确的名称。