【发布时间】:2015-03-10 15:57:07
【问题描述】:
我正在编写一个 bash 脚本来根据它们的 SHA-1 哈希生成重复文件的列表。然后我希望从包含目录中所有文件名的数组中删除这些重复项,因此我只能将非重复文件复制到新目录。
我面临的问题是许多文件的名称中包含空格,因此我不知道如何将它们与列表分开。
# Fill array with all file names in directory
files=(*)
#find all repeating sha-1 values
repeats=$(echo $(find -type f -exec sha1sum '{}' ';' | sort | uniq --all-repeated=separate -w 40 ))
由于名称中的空格,输出采用以下格式:
1386d44b318730ffa98a34176d4e8b7eab8e02a4 ./Forensic Scripting 01 - Introduction to Developing Software and Shell Scripting (1).ppt 1386d44b318730ffa98a34176d4e8b7eab8e02a4 ./Forensic Scripting 01 - Introduction to Developing Software and Shell Scripting.ppt 2f4fc07ee944d666c34b0dfeeda90ad1c5cb9e71 ./kravica_waterfall_bosnia (copy).jpg 2f4fc07ee944d666c34b0dfeeda90ad1c5cb9e71 ./kravica_waterfall_bosnia.jpg 45f478cedd980ff2313f05fd0997a08492b9b21b ./canada-niagarafalls_-5 (another copy).jpg 45f478cedd980ff2313f05fd0997a08492b9b21b ./canada-niagarafalls_-5 (copy).jpg 45f478cedd980ff2313f05fd0997a08492b9b21b ./canada-niagarafalls_-5.jpg a3c6c5b749ce43cc3dade17230580b5ecf4d1557 ./frink (copy).png a3c6c5b749ce43cc3dade17230580b5ecf4d1557 ./frink.png d6039f1932dc2bb6fecfa41c02a7e9bc6656c621 ./UK - Associate Guide (Final Version -Effective Date 13 Feb 2012) (copy).pdf d6039f1932dc2bb6fecfa41c02a7e9bc6656c621 ./UK - Associate Guide (Final Version -Effective Date 13 Feb 2012).pdf
如何将文件名用引号括起来,以便将它们清楚地标识为一个块,以便我能够根据这些列表执行操作?
【问题讨论】:
-
echo毫无意义。如果不逐行操作,您就无法做到这一点(即使只有在您的文件名不能包含换行符时才有效)。如果可以,您需要以 NUL 分隔的条目。见mywiki.wooledge.org/BashFAQ/001