2016-06-16 23 views
1

我有我的Windows的硬盤安裝在/媒體在Ubuntu 16.04 LTS。在我的終端中,我已導航到路徑/media/me/OS/Users/Me/Music。從這裏,我運行一個find命令來搜索這個Windows路徑所有的MP3:我怎樣才能複製文件的列表,用空格在Linux終端

find . -type f -name *.mp3 

這將返回一串.MP3文件路徑(顏色意味着什麼;必須通過維基格式發生):

./iTunes/iTunes Music/Yeah Yeah Yeahs/It's Blitz/01 Skeletons.mp3 
./iTunes/iTunes Music/Yeah Yeah Yeahs/It's Blitz/Gold Lion.mp3 
./iTunes/iTunes Music/Yeah Yeah Yeahs/It's Blitz/Heads Will Roll.mp3 
./iTunes/iTunes Music/Yeah Yeah Yeahs/It's Blitz/Maps.mp3 

正如你所看到的,也有在文件名中的空格。我的目標是將列表中的所有文件(其中560個左右)複製到我的Ubuntu硬盤的/home/me/Music目錄中。下面是我嘗試過的一些事情,所有這些都以終端向我大吼,它無法找到「./iTunes/iTunes」,「Music/Yeah」,「Yeah」......你得到了理念。

事情我已經嘗試:

  1. for f in $(find . -name *.mp3); do cp $f ~/Music/WindowsMP3s/; done
  2. find . -type f -name *.mp3 > output.txt,然後while read file; do cp $file ~/Music/WindowsMP3s/; done <output.txt

我已經試過圍繞在for循環,並在重音符(`)文件名output.txt文件本身。我甚至嘗試在每個空間前用1和2反斜槓編輯output.txt。

任何想法都會很棒!

P.S.是的,我知道我可以通過文件管理器完成所有操作,並將它們複製到外部硬盤驅動器,然後將它們複製到Ubuntu,但哪裏有趣呢? :)

回答

1

有幾種方法可以做到這一點。您必須使用雙引號將空間擴展爲變量(反引號用於內聯執行)。

最簡單的就是通過CP複製的./iTunes/iTunes Music所有內容/home/me/Music

cp -av "./iTunes/iTunes Music"/* /home/me/Music 

如果你想建立一個列表,操作,然後僅複製列表的內容,然後用while read,像你一樣,但在引號每個結果:

find . -type f -name *.mp3 > output.txt 
cat output.txt | while read file; do 
    cp "$file" ~/Music/WindowsMP3s/ 
done 
+0

這樣一個簡單的解決方案。應該知道至少TRY雙引號!謝謝Ziggy。 – mstep91

2

使用引號後,您可以簡單地追加通配符。

例子:

cp "./Folder With Spaces/"*.mp3 ./folderWithoutSpaces/ 
+0

PLUS1。但我不確定,如果OP需要從嵌套的子目錄中複製mp3文件。 – anishsane