假设某个特定命令生成的文件很少(我不知道这些文件的名称)。我想将这些文件移动到一个新文件夹中。如何在shell脚本中执行此操作?
我无法使用:
#!/bin/bash
mkdir newfolder
command
mv * newfolder
因为cwd也包含很多其他文件。
答案 0 :(得分:2)
第一个问题是,你可以运行command
newfolder
作为当前目录,以便在正确的位置生成文件:
mkdir newfolder
cd newfolder
command
或者如果command
不在路径中:
mkdir newfolder
cd newfolder
../command
如果你不能这样做,那么你需要捕获文件前后的列表并进行比较。这样做的一种不太优雅的方式如下:
# Make sure before.txt is in the before list so it isn't in the list of new files
touch before.txt
# Capture the files before the command
ls -1 > before.txt
# Run the command
command
# Capture the list of files after
ls -1 > after.txt
# Use diff to compare the lists, only printing new entries
NEWFILES=`diff --old-line-format="" --unchanged-line-format="" --new-line-format="%l " before.txt after.txt`
# Remove our temporary files
rm before.txt after.txt
# Move the files to the new folder
mkdir newfolder
mv $NEWFILES newfolder
答案 1 :(得分:1)
如果您想将它们移动到子文件夹中:
mv `find . -type f -maxdepth 1` newfolder
设置-maxdepth 1
只能找到当前目录中的文件而不会递归。传递-type f
表示“查找所有文件”(“d”分别表示“查找所有目录”)。
答案 2 :(得分:1)
使用模式匹配:
$ ls *.jpg # List all JPEG files
$ ls ?.jpg # List JPEG files with 1 char names (eg a.jpg, 1.jpg)
$ rm [A-Z]*.jpg # Remove JPEG files that start with a capital letter
从here无耻地获取的示例,您可以在其中找到有关它的更多有用信息。
答案 3 :(得分:1)
假设您的命令打印出每行一个名称,此脚本将起作用。
my_command | xargs -I {} mv -t "$dest_dir" {}