这个问题的灵感来自
我看到这些结构
for file in `find . -type f -name ...`; do smth with ${file}; done
Run Code Online (Sandbox Code Playgroud)
和
for dir in $(find . -type d -name ...); do smth with ${dir}; done
Run Code Online (Sandbox Code Playgroud)
几乎每天都在这里使用,即使有些人花时间对这些帖子发表评论,解释为什么应该避免这种东西......
看到此类帖子的数量(以及有时这些评论被简单地忽略的事实)我想我还不如问一个问题:
为什么循环find的输出是不好的做法,为 返回的每个文件名/路径运行一个或多个命令的正确方法是find什么?
我需要在文件夹中找到最大的文件。
如何递归扫描文件夹并按大小对内容进行排序?
我试过使用ls -R -S,但这也列出了目录。
我也尝试使用find.
如何从 bash 获取文件扩展名?这是我尝试过的:
filename=`basename $filepath`
fileext=${filename##*.}
Run Code Online (Sandbox Code Playgroud)
通过这样做,我可以bz2从路径中获得扩展名/dir/subdir/file.bz2,但是我的路径有问题/dir/subdir/file-1.0.tar.bz2。
如果可能的话,我更喜欢只使用 bash 而不使用外部程序的解决方案。
为了让我的问题更清楚,我正在创建一个 bash 脚本,只需通过extract path_to_file. 如何提取文件由脚本通过查看其压缩或存档类型来确定,可能是 .tar.gz、.gz、.bz2 等。我认为这应该涉及字符串操作,例如,如果我得到扩展名,.gz那么我应该检查它.tar之前是否有字符串.gz- 如果有,扩展名应该是.tar.gz.
我想知道的含义{} +的exec命令,之间有什么区别{} +和{} \;。确切地说,这两者之间有什么区别:
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
Run Code Online (Sandbox Code Playgroud) 我正在使用 CentOS 6.8
我想知道是否可以找到所有扩展名为 .log 的文件并按文件大小排序并在文件名旁边显示文件大小?
我目前正在使用此命令查找所有扩展名为 .log 的文件:
find . -name \*.log
Run Code Online (Sandbox Code Playgroud) 当我跑
ls | sort -S
我得到
sort : option requires an argument -- ´S´
为什么我无法使用排序选项按大小对文件列表进行排序?我知道我只能ls单独使用命令。
我尝试使用排序文件 sort -h
algorithms@algorithms:~$ ls -lh /boot | sort -h
drwxr-xr-x 5 root root 4.0K Dec 28 16:19 grub
-rw------- 1 root root 4.2M Dec 5 13:10 System.map-4.18.0-13-generic
-rw------- 1 root root 4.2M Nov 14 21:30 System.map-4.18.0-12-generic
-rw------- 1 root root 8.2M Dec 5 13:11 vmlinuz-4.18.0-13-generic
-rw------- 1 root root 8.2M Nov 14 21:50 vmlinuz-4.18.0-12-generic
-rw-r--r-- 1 root root 1.5M Nov 14 21:30 abi-4.18.0-12-generic
-rw-r--r-- 1 root root 179K Jan 28 2016 memtest86+.bin
-rw-r--r-- 1 root root 17 Nov 14 …Run Code Online (Sandbox Code Playgroud)