从文件夹中删除一个文件到它的名字 (bash)
Remove a file from a folder to its name (bash)
我有几个文件夹,名称如下:
- 4553, 6723, 7765.
我里面有一个同名的pdf文件:
- 4553.pdf、6723.pdf、7765.pdf
我想移动到每个文件夹并移动 .pdf,以便它们都在一个文件夹中,例如带有脚本的“allpdf”
我试过这个:
for folder in *; do
cd $folder
mv "*.pdf" "../"
done
你的第一个 cd 把你放在目录里,你留在那里,所以下一个 cd 不能工作(你是一个水平比你想象的要低)。
所以,要么你这样做:
for folder in *; do
cd $folder
mv "*.pdf" "../"
cd ..
done
或者(我认为最好),你这样做:
for folder in *; do
mv "$folfer/*.pdf" "."
done
最小和简单的解决方案:
如果您使用的是 bash shell,请尝试以下操作:
您应该在其中包含 pdf 文件的所有子目录的父目录中。因此,让我们将您的父目录称为 pdf_parent_dir,该目录应包含文件夹 4553、6723、7765 等,其中包含 pdf 文件,然后 运行 命令如下:
# moving to the desired parent directory
cd pdf_parent_directory
# to move files to this directory
mkdir allpdf
# to enable bash star globbing
shopt -s globstar
# finally moving all pdf files from subdirectories to allpdf directory
mv **/*.pdf allpdf/
根据你提到的,不应该有任何同名文件,但如果有,那么 mv 命令将失败,因为它试图将同名文件移动到最终的 allpdf/ 目录中
我在我的 Linux 机器上尝试过创建一个与您提到的类似的文件夹和文件结构,它按预期工作。如果您遇到任何错误,请告诉我
我有几个文件夹,名称如下:
- 4553, 6723, 7765.
我里面有一个同名的pdf文件:
- 4553.pdf、6723.pdf、7765.pdf
我想移动到每个文件夹并移动 .pdf,以便它们都在一个文件夹中,例如带有脚本的“allpdf”
我试过这个:
for folder in *; do
cd $folder
mv "*.pdf" "../"
done
你的第一个 cd 把你放在目录里,你留在那里,所以下一个 cd 不能工作(你是一个水平比你想象的要低)。
所以,要么你这样做:
for folder in *; do
cd $folder
mv "*.pdf" "../"
cd ..
done
或者(我认为最好),你这样做:
for folder in *; do
mv "$folfer/*.pdf" "."
done
最小和简单的解决方案:
如果您使用的是 bash shell,请尝试以下操作: 您应该在其中包含 pdf 文件的所有子目录的父目录中。因此,让我们将您的父目录称为 pdf_parent_dir,该目录应包含文件夹 4553、6723、7765 等,其中包含 pdf 文件,然后 运行 命令如下:
# moving to the desired parent directory
cd pdf_parent_directory
# to move files to this directory
mkdir allpdf
# to enable bash star globbing
shopt -s globstar
# finally moving all pdf files from subdirectories to allpdf directory
mv **/*.pdf allpdf/
根据你提到的,不应该有任何同名文件,但如果有,那么 mv 命令将失败,因为它试图将同名文件移动到最终的 allpdf/ 目录中
我在我的 Linux 机器上尝试过创建一个与您提到的类似的文件夹和文件结构,它按预期工作。如果您遇到任何错误,请告诉我