我在UNIX的一个目录下有几百个PDF。PDF的名称非常长(约60个字符)。
当我尝试使用以下命令一起删除所有PDF时:
rm -f *.pdf
我收到以下错误:
/bin/rm: cannot execute [Argument list too long]
此错误的解决方案是什么?mv和cp命令是否也会出现此错误?如果是,如何解决这些命令?
我在UNIX的一个目录下有几百个PDF。PDF的名称非常长(约60个字符)。
当我尝试使用以下命令一起删除所有PDF时:
rm -f *.pdf
我收到以下错误:
/bin/rm: cannot execute [Argument list too long]
此错误的解决方案是什么?mv和cp命令是否也会出现此错误?如果是,如何解决这些命令?
当前回答
我也遇到了同样的问题,因为一个文件夹中的临时图像与日俱增,这个命令帮助我清除了这个文件夹
find . -name "*.png" -mtime +50 -exec rm {} \;
与其他命令的不同之处在于mtime参数,该参数将只接受早于X天的文件(在示例中为50天)
多次使用这种方法,减少每天执行的次数,我能够删除所有不必要的文件
其他回答
如果你想删除30/90天以上(+)或30/90天以下(-)的文件/文件夹,可以使用以下ex命令
例如:对于删除90天文件/文件夹后的90天不包括上述内容,这意味着91、92……100天
find <path> -type f -mtime +90 -exec rm -rf {} \;
例如:对于您想要删除的最近30天的文件,请使用以下命令(-)
find <path> -type f -mtime -30 -exec rm -rf {} \;
如果你想保存文件超过2天
find <path> -type f -mtime +2 -exec gzip {} \;
如果您只想查看过去一个月的文件/文件夹。前任:
find <path> -type f -mtime -30 -exec ls -lrt {} \;
30天以上,然后列出文件/文件夹前任:
find <path> -type f -mtime +30 -exec ls -lrt {} \;
find /opt/app/logs -type f -mtime +30 -exec ls -lrt {} \;
对于这个问题,下面的选项似乎很简单。我从其他线程获得了这些信息,但它对我有所帮助。
for file in /usr/op/data/Software/temp/application/openpages-storage/*; do
cp "$file" /opt/sw/op-storage/
done
只需运行上面的一个命令,它就会完成任务。
删除目录/path/To/dir_with_pdf_files中的所有*.pdf/
mkdir empty_dir # Create temp empty dir
rsync -avh --delete --include '*.pdf' empty_dir/ /path/to/dir_with_pdf_files/
如果您有数百万个文件,使用通配符通过rsync删除特定文件可能是最快的解决方案。它会解决你遇到的错误。
(可选步骤):干运行。检查将删除而不删除的内容`
rsync -avhn --delete --include '*.pdf' empty_dir/ /path/to/dir_with_pdf_files/
...
单击rsync提示和技巧以获取更多rsync黑客
您可以使用bash数组:
files=(*.pdf)
for((I=0;I<${#files[@]};I+=1000)); do
rm -f "${files[@]:I:1000}"
done
这样,它将以每一步1000个文件的批量擦除。
我发现对于非常大的文件列表(>1e6),这些答案太慢了。这里有一个在python中使用并行处理的解决方案。我知道,我知道,这不是linux。。。但这里没有其他办法奏效。
(这节省了我几个小时)
# delete files
import os as os
import glob
import multiprocessing as mp
directory = r'your/directory'
os.chdir(directory)
files_names = [i for i in glob.glob('*.{}'.format('pdf'))]
# report errors from pool
def callback_error(result):
print('error', result)
# delete file using system command
def delete_files(file_name):
os.system('rm -rf ' + file_name)
pool = mp.Pool(12)
# or use pool = mp.Pool(mp.cpu_count())
if __name__ == '__main__':
for file_name in files_names:
print(file_name)
pool.apply_async(delete_files,[file_name], error_callback=callback_error)