大家好,很抱歉这个新手问题,但我正在阅读本教程:如何在 BIOS 启动菜单中删除“Ubuntu”?(UEFI)并且无法找到 Ubuntu 子目录来删除它。我已经阅读了这里的几篇文章:使用定位查找目录,https://stackoverflow.com/questions/47887522/how-to-search-for-a-directory-from-the-terminal-in -ubuntu等没有成功。任何建议将不胜感激。
我想在所有子目录中的每个 PDF 上执行一个脚本,但我遇到了包含空格的文件名的问题。我搜索了很多,这篇文章似乎是一个解决方案,但我找不到让我的脚本工作的方法。
在文件夹中,这很好用:
for f in *.pdf; do
filename=$(basename -- "${f}") && extension="${filename##*.}" && filename="${filename%.*}" && outpt="$filename-compressed.pdf"
echo "$filename"
echo "$outpt"
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE \
-dQUIET -dBATCH -sOutputFile="$outpt" "${f}";
# rm "${f}";
done;
然后我尝试反复搜索(在添加“gs -sDEVICE=pdfwrite ......”之前)
for f in $(find "$(pwd)" -name '*.pdf'); do
filename=$(basename -- "${f}") && extension="${filename##*.}" && filename="${filename%.*}" && outpt="$filename-compressed.pdf"
echo "$filename"
echo "$outpt"
done
但我无法正确获取文件名。可能是因为文件名中的空格?
如果您有想法,感谢您的帮助!
------------------ 解决了谢谢@steeldriver
find . -name '*.pdf' -execdir sh -c '
for f do
filename=${f##*/} && extension=${f##*.} \
&& filename=${filename%.*} && outpt=$filename-compressed.pdf
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile="$outpt" "$filename.pdf";
echo "$filename"
echo "$outpt"
# rm "$filename.pdf" # remove original
done' find-sh {} +
我需要找到 Qt 插件目录,并且我花了一个小时寻找一种方法来查找包含 / 的目录名称。有大量的“qt”,如果“qt/plugins”有误,我需要不同的格式,所以我需要一个通用的目录名称搜索解决方案,包括 /。
例如,我的计算机上存在 bin/yelp(我将其用作测试),而我在 Google 中找到的所有命令语法都找不到。
通常,我会想出这样的事情,但我已经花了一个多小时在这上面。
以下命令来自https://www.tecmint.com/xargs-command-examples/示例 #9。就是从当前目录中删除与 *gz 不匹配的文件。
$ find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}
-print0
arg of find
command-0
和-I {}
args of command的目的是什么xargs
?为什么需要它们?谢谢!
我想递归地重命名我的文件,以 *.fna.gz 结尾,父目录两步,即“Aspergillus_neoniger”。您可以在此图像中看到子目录的详细信息
.
├── Aaosphaeria_arxii
│ ├── all_assembly_versions
│ │ └── GCA_010015735.1_Aaoar1
│ │ ├── GCA_010015735.1_Aaoar1_assembly_structure
│ │ ├── GCA_010015735.1_Aaoar1_cds_from_genomic.fna.gz
│ │ ├── GCA_010015735.1_Aaoar1_genomic.fna.gz
│ │ └── GCA_010015735.1_Aaoar1_rna_from_genomic.fna.gz
│ ├── latest_assembly_versions
│ │ └── GCA_010015735.1_Aaoar1
│ │ ├── GCA_010015735.1_Aaoar1_assembly_structure
│ │ ├── GCA_010015735.1_Aaoar1_cds_from_genomic.fna.gz
│ │ ├── GCA_010015735.1_Aaoar1_genomic.fna.gz
│ │ └── GCA_010015735.1_Aaoar1_rna_from_genomic.fna.gz
│ └── representative
│ └── GCA_010015735.1_Aaoar1
│ ├── GCA_010015735.1_Aaoar1_assembly_structure
│ ├── GCA_010015735.1_Aaoar1_cds_from_genomic.fna.gz
│ ├── GCA_010015735.1_Aaoar1_genomic.fna.gz
│ └── GCA_010015735.1_Aaoar1_rna_from_genomic.fna.gz
我没有发布“树”的输出,因为发布后没有以正确的格式看到它。每个学名“Aaosphaeria_arxii”都有三个子目录,我只想从“latest_assembly_versions”文件夹中提取文件,扩展名为“_genomic.fna.gz”。在这种情况下,将*“_genomic.fna.gz”重命名为科学名称“Aaosphaeria_arxii”。
问候
我想重命名文件夹子系统中的每个文件,其中包含要替换为下划线的斜杠
当前文件名示例:
Hello/there.txt
File/name.jpg
至
Hello_there.txt
File_name.jpg
这些文件位于同一文件夹系统的不同子文件夹中,并且斜线位于不同的位置。我尝试按如下方式使用重命名命令:
rename "s/\//_/g" *
但我无法获得任何成功。你能给我一个正确的方向吗?
我有一个名为dir.sock
的文件。/var/spool/
这是结果ls -al /var/spool/
drwxr-xr-x. 9 root root 121 Dec 16 09:55 .
drwxr-xr-x. 19 root root 267 Dec 14 10:47 ..
drwxr-xr-x. 2 root root 63 Oct 28 2019 anacron
drwx------. 2 root root 6 Feb 13 2019 cron
drwxr-xr-x. 2 root root 6 Dec 14 2017 lpd
drwxrwxr-x. 2 root mail 22 Dec 14 10:47 mail
prw-r--r--. 1 telegraf root 0 Dec 17 10:04 nethermind.sock
drwxr-xr-x. 16 root root 201 Jul 29 2019 postfix
drwxr-xr-x. 3 root root 19 Oct 28 2019 rhsm
drwx------. 2 root root 6 Sep 6 2018 up2date
可以看到nethermind.sock
文件被标记为prw-r--r--.
我想删除这个文件,所以我在我的脚本中写了这个 -
NETHERMIND_SOCK="/var/spool/nethermind.sock"
PARITY_SOCK="/var/spool/parity.sock"
if [ -f $NETHERMIND_SOCK ]; then
rm -f $NETHERMIND_SOCK
elif [ -f $PARITY_SOCK ]; then
rm -f $PARITY_SOCK
else
echo ".sock not found"
fi
它总是让.sock not found
我尝试查找和删除,例如-
sudo find / -type f -name "*.sock" -exec rm -f {} +
但似乎找不到该文件。
如果我这样做sudo find /var/spool/ -type f -name "nethermind.sock"
,它不会返回任何东西。
我不确定p
这里的标记prw-r--r--.
这是一个链接,实际上是什么p
标记的意思。但是find
命令无法找到管道文件。
我想find
向我展示排除权限 660 AND 文件的结果。
即它必须向我显示没有权限 660 和所有目录的文件。
我跑:
find "/path/to/dir" -not \( -perm 660 -a -type f \) -exec ls -lA {} \;
但它向我显示了权限为 660 的文件。
结果:
-rw-rw---- 1 root root 124832 Dec 21 2018 READ.ME.txt
重要的!
我完全需要-not
和组\( ... \)
。
我将这些文件放入一个文件夹中:
Enero.01200.2019.txt
Enero.01200.2019.pdf
Enero.01200.2019.png
Febrero.03100.2019.txt
Febrero.03100.2019.pdf
Febrero.03100.2019.png
在每个 .txt 文件中,我有一个值表明订单未付款,我需要清除未付款订单的日志文件夹,例如,我在运行前使用此命令对 output.sh 进行检查:
find /log/users/ -name '*.txt' | xargs grep -l unpaid | awk '{print "mv "$1" /tmp/ }' >> clearlog.sh
我需要的是打印例如:
mv /log/users/Enero.01200.2019.txt /tmp/ && mv /log/users/Enero.01200.2019.pdf /tmp/ && mv /log/users/Enero.01200.2019.png /tmp/
如果有人有更好的方法,但要求确认或看看会发生什么,我会很感激。
大约有 2,500 个文件要清除,我不会乱删除错误的文件。
注意:所有 txt 文件都有一个 PDF 和 PNG 相关文件。我在 ubuntu 20.04 服务器上工作
提前致谢!
我了解如何使用 grep;但是,我无法理解在我的命令中使用“>”的功能?