Bash - pindahkan file dengan nama yang mirip dari banyak direktori ke pwd

1

Katakanlah saya punya direktori:

mydir1
mydir2
mydir3
mydir4

berisi file yang dimulai dengan abcd

Saya ingin memindahkan semua file yang diawali dengan abcdke direktori induk. Bagaimana saya bisa melakukan ini?

Inilah yang saya mainkan:

for file in pwd; mv *abcd ../
atomh33ls
sumber

Jawaban:

3

cd ke direktori induk, lalu:

for f in */abcd*;
do mv $f ./
done

yang akan cocok mydir1/abcdfoo, mydir2/abcdbardll. dan pindahkan ke pwd (yang merupakan direktori induk). Jika Anda hanya ingin melihat direktori yang disebut mydir * Anda dapat menentukan

for f in mydir*/abcd*; 
do mv $f ./
done

Anda juga bisa melakukannya

find . -name "abcd*" -type f -exec mv {} ./ \;

yang menemukan semua file biasa (bukan dir) yang bernama abcd * dan memindahkannya ke pwd. Temukan terlihat secara rekursif dari direktori yang Anda tentukan setelah perintah find, itu "." pada kasus ini. Anda dapat menggunakan jalur absolut seperti:

find /path/to/the/parent/dir -name "abcd*" -type f -exec mv {} /path/to/the/destination/dir/ \;

PERINGATAN : Saya baru menyadari ini ketika saya mencobanya. Jika ada banyak file dengan nama yang sama di direktori yang berbeda misalnya mydir1 / abcdfoo, mydir2 / abcdfoo dan sebagainya, semua kecuali satu dari mereka akan ditimpa, sehingga Anda hanya memiliki satu file abcdfoo di direktori induk.

stib
sumber
Terima kasih, saya mendapatkan kesalahan berikut saat menggunakan saran pertama Anda -bash: syntax error near unexpected token 'mv'. Saran kedua bekerja ...
atomh33ls
Ah, ya, saya mengujinya di zsh, di mana untuk loop tidak perlu "lakukan". Saya akan mengubah jawabannya.
stib