たくさんのファイルとディレクトリが入ったディレクトリがあります。整理するために、これらのファイルをすべてディレクトリに配置するので、次のようにします。
$ ls | wc -l
123
$ mkdir new_directory
$ mv * ./new_directory
ただし、移動しようとするため、明らかに機能しませんnew_directory
からnew_directory
。そのディレクトリ内のすべてのファイルとディレクトリをコピーして貼り付ける必要なしに、1行でやりたいことを簡単に行う方法はありますか?
きみの
mv * ./new_directory
速くて汚いワンライナー。
mv `ls -A | grep -v new_directory` ./new_directory
ファイルだけを探している場合(つまり、ディレクトリではない場合)、
find . -type f -maxdepth 1 -exec mv {} ./new_directory/ \;
最もポータブルなソリューションです。速度を上げるには、-print0と-0を使用して、findとxargsを移動する必要があります。ただし、GNU findとxargsがある場合のみです。
私がこの問題を経験したとき、私は次のいずれかを実行しました。
$ mkdir ../new-directory
$ mv * ../new-directory/
$ mv ../new-directory .
または
$ mkdir .new-directory
$ mv * .new-directory/
$ mv .new-directory new-directory
2番目の形式は、「。」で始まるファイル名をスキップするワイルドカードを利用しています。
何について:
cd ..
mv old_dir new_directory
mkdir old_dir
mv new_directory old_dir
IOW、内容を新しいディレクトリに移動せず、このディレクトリを新しいディレクトリ内に配置してください。
@ Rembrane の答えと同様の方法で(ワンライナーではありませんが):
for FN in *
do
if [ "<new_dir>" != $FN ] then
mv $FN <new_dir>
done
これは、システムにfind
が存在しない場合でも、100%移植可能でなければなりません。
私の提案:他の人が述べたように、
mv * ./new_directory
iFFを検索すると、全体の展開が十分短いことがわかります。
それ以外の場合は、はるかに多数のファイルにスケーリングするこの1つを試すことができます。
find . -type f -maxdepth 1 | xargs -s100000 echo | xargs -iXXX mv XXX new_directory
説明
使用する:
find -mindepth 1 -maxdepth 1 \! -name new_directory -print0 | \
xargs -0 -P 100 -I'{}' mv '{}' new_directory
xargs
manページから:
-P max-procs
Run up to max-procs processes at a time;