我在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命令是否也会出现此错误?如果是,如何解决这些命令?
当前回答
我用解决了
我在macOS上使用zsh
我只移动了数千个jpg文件。在一行命令中的mv内。
确保要移动的文件名中没有空格或特殊字符
for i in $(find ~/old -type f -name "*.jpg"); do mv $i ~/new; done
其他回答
如果你想删除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 {} \;
或者您可以尝试:
find . -name '*.pdf' -exec rm -f {} \;
删除目录/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实际上将星号扩展到每个匹配的文件,从而产生一个非常长的命令行。
试试看:
find . -name "*.pdf" -print0 | xargs -0 rm
警告:这是一个递归搜索,也会在子目录中查找(和删除)文件。只有当您确定不需要确认时,才在rm命令中使用-f。
可以执行以下操作以使命令非递归:
find . -maxdepth 1 -name "*.pdf" -print0 | xargs -0 rm
另一个选项是使用find的-delete标志:
find . -name "*.pdf" -delete
我遇到过几次这个问题。许多解决方案将为每个需要删除的文件运行rm命令。这是非常低效的:
find . -name "*.pdf" -print0 | xargs -0 rm -rf
我最终编写了一个python脚本,根据文件名中的前4个字符删除文件:
import os
filedir = '/tmp/' #The directory you wish to run rm on
filelist = (os.listdir(filedir)) #gets listing of all files in the specified dir
newlist = [] #Makes a blank list named newlist
for i in filelist:
if str((i)[:4]) not in newlist: #This makes sure that the elements are unique for newlist
newlist.append((i)[:4]) #This takes only the first 4 charcters of the folder/filename and appends it to newlist
for i in newlist:
if 'tmp' in i: #If statment to look for tmp in the filename/dirname
print ('Running command rm -rf '+str(filedir)+str(i)+'* : File Count: '+str(len(os.listdir(filedir)))) #Prints the command to be run and a total file count
os.system('rm -rf '+str(filedir)+str(i)+'*') #Actual shell command
print ('DONE')
这对我来说非常有效。我能够在大约15分钟内清除一个文件夹中超过200万个临时文件。我从一点点代码中对tar进行了注释,这样任何一个对python一无所知的人都可以操作这段代码。