use*_*746 16 directory bash rename find
我的目录结构如下
Directory1\file1.jpg
\file2.jpg
\file3.jpg
Directory2\anotherfile1.jpg
\anotherfile2.jpg
\anotherfile3.jpg
Directory3\yetanotherfile1.jpg
\yetanotherfile2.jpg
\yetanotherfile3.jpg
Run Code Online (Sandbox Code Playgroud)
我正在尝试在ubuntu上的bash shell中使用命令行从每个目录中获取第一个文件,并将其重命名为目录名称并将其向上移动一级,使其位于目录旁边.
在上面的例子中:
file1.jpg将被重命名Directory1.jpg并放在文件夹旁边Directory1
anotherfile1.jpg将重命名Directory2.jpg并放在文件夹Directory2旁边
yetanotherfile1.jpg将被重命名Directory3.jpg并放在文件夹旁边Directory3
我尝试过使用:
find . -name "*.jpg"
Run Code Online (Sandbox Code Playgroud)
但它没有按顺序列出文件(我需要第一个文件).
这一行:
find . -name "*.jpg" -type f -exec ls "{}" +;
Run Code Online (Sandbox Code Playgroud)
以正确的顺序列出文件但是如何只选择每个目录中的第一个文件并将其向上移动一级?
任何帮助,将不胜感激!
编辑:当我引用第一个文件时,我的意思是每个jpg从0编号到该文件夹中的多个文件 - 例如:file1,file2 ...... file34,file35等...另外要提的一件事是文件的格式是随机的,所以编号可能从0或1a或1b等开始...
koj*_*iro 29
如果第一个意味着shell首先找到的shell(词法,但可能受到影响LC_COLLATE),那么这应该有效:
for dir in */; do
for file in "$dir"*.jpg; do
echo mv "$file" "${file%/*}.jpg" # If it does what you want, remove the echo
break 1
done
done
Run Code Online (Sandbox Code Playgroud)
概念证明:
$ mkdir dir{1,2,3} && touch dir{1,2,3}/file{1,2,3}.jpg
$ for dir in */; do for file in "$dir"*.jpg; do echo mv "$file" "${file%/*}.jpg"; break 1; done; done
mv dir1/file1.jpg dir1.jpg
mv dir2/file1.jpg dir2.jpg
mv dir3/file1.jpg dir3.jpg
Run Code Online (Sandbox Code Playgroud)
小智 21
你可以进入每个目录并运行:
$ mv `ls | head -n 1` ..
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25254 次 |
| 最近记录: |